package org.vartist.atld.util.device;

import java.io.File;

import android.os.Environment;
import android.os.StatFs;

public class MemoryUtil {
	 static final int ERROR = -1;    
	 
	 static public boolean externalMemoryAvailable() {             
		 return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);         
	 }   
	 
	 static public long getAvailableInternalMemorySize() {                 
		 File path = Environment.getDataDirectory();                 
		 StatFs stat = new StatFs(path.getPath());                 
		 long blockSize = stat.getBlockSize();                 
		 long availableBlocks = stat.getAvailableBlocks();                 
		 return availableBlocks * blockSize;         
	 }                  
	 
	 static public long getTotalInternalMemorySize() {                 
		 File path = Environment.getDataDirectory();                 
		 StatFs stat = new StatFs(path.getPath());                 
		 long blockSize = stat.getBlockSize();                 
		 long totalBlocks = stat.getBlockCount();                 
		 return totalBlocks * blockSize;         
	}                  
	 
	 static public long getAvailableExternalMemorySize() {                 
		 if(externalMemoryAvailable()) {                         
			 File path = Environment.getExternalStorageDirectory();                         
			 StatFs stat = new StatFs(path.getPath());                         
			 long blockSize = stat.getBlockSize();                         
			 long availableBlocks = stat.getAvailableBlocks();                         
			 return availableBlocks * blockSize;                 
		} else {                         
			return ERROR;                 
		}         
	}                  
	 
	 static public long getTotalExternalMemorySize() {                 
		 if(externalMemoryAvailable()) {                         
			 File path = Environment.getExternalStorageDirectory();                         
			 StatFs stat = new StatFs(path.getPath());                         
			 long blockSize = stat.getBlockSize();                         
			 long totalBlocks = stat.getBlockCount();                         
			 return totalBlocks * blockSize;                 
		} else {                         
			return ERROR;                 
		}         
	}                  
	 
	 static public String formatSize(long size) {                 
		 String suffix = null;                          
		 if (size >= 1024) {                         
			 suffix = "KB";                         
			 size /= 1024;                         
			 if (size >= 1024) {                                 
				 suffix = "MB";                                 
				 size /= 1024;        
			}                 
		}
		
		StringBuilder resultBuffer = new StringBuilder(Long.toString(size));                          
		int commaOffset = resultBuffer.length() - 3;                 
		while (commaOffset > 0) {                        
			resultBuffer.insert(commaOffset, ',');                         
			commaOffset -= 3;                 
		}                          
		
		if (suffix != null)                         
			resultBuffer.append(suffix);
		
		return resultBuffer.toString();         
	}
}
